package ch04;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

/**
 * @author Jane
 * @date 2024-03-20 16:15
 */

public class JedisAPI {
    private static JedisPool jedisPool;

    static {
        // 创建并设置连接池对象  JDBC
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxTotal(50); // 连接池最大连接数,默认为8
        config.setMaxIdle(10); // 连接池中最大的空闲连接,默认为8
        config.setMinIdle(7); // 连接池中最小的空闲连接,默认为0
        config.setMaxWaitMillis(1000); // 获取资源等待时间
        config.setTestOnBorrow(true); // 获取资源时是否验证资源有效性

        // 创建Jedis连接池
        jedisPool = new JedisPool(config, "127.0.0.1", 6379, 10000, "123456", 0);
    }

    public void destroy() {
        if (!(jedisPool == null || jedisPool.isClosed()))
            jedisPool.close();
    }

    /**
     * set key and value to redis
     * @param key
     * @param value
     * @return
     */
    public boolean set(String key,String value){
        Jedis jedis=null;
        try {
            jedis=jedisPool.getResource();
            jedis.set(key,value);
            return true;
        }catch (Exception e){
            e.printStackTrace();
            return false;
        }finally {
            //返还到连接池

            if (jedis!=null)
                jedis.close();
        }
    }

    /**
     * set key and value to redis
     * @param key
     * @param seconds
     * @param value
     * @return
     */
    public boolean set(String key,int seconds,String value){
        Jedis jedis=null;
        try {
            jedis=jedisPool.getResource();
            jedis.setex(key,seconds,value);
            return true;
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            //返还到连接池
            if (jedis!=null)
                jedis.close();
        }
        return false;
    }

    /**
     * 判断某个key是否存在
     * @param key
     * @return
     */
    public boolean exist(String key){
        Jedis jedis=null;
        try {
            jedis =jedisPool.getResource();
            return jedis.exists(key);
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            //返还到连接池
            if (jedis!=null)
                jedis.close();
        }
        return false;
    }

    /**
     * 获取数据
     * @param key
     * @return
     */
    public String get(String key){
        Jedis jedis=null;
        try {
            jedis = jedisPool.getResource();
            return jedis.get(key);
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            //返还到连接池
            if (jedis != null)
                jedis.close();
        }
        return null;
    }

    /**
     * @param key
     * @return 剩余多少秒
     */
    public Long ttl(String key){
        Jedis jedis=null;
        try {
            jedis=jedisPool.getResource();
            return jedis.ttl(key);
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            //返还到连接池
            if (jedis != null)
                jedis.close();
        }
        return (long)-2;
    }


    /**
     * 删除指定的key
     * @param key
     * @return
     */
    public boolean delete(String key){
        Jedis jedis=null;
        try {
            jedis = jedisPool.getResource();
            return jedis.del(key) == 1;
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            //返还到连接池
            if (jedis != null)
                jedis.close();
        }
        return false;
    }


    public Long lpush(String key,String... values){
        Jedis jedis=null;
        try {
            jedis = jedisPool.getResource();
            Long lpush = jedis.lpush(key, values);

            return lpush;
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            //返还到连接池
            if (jedis != null)
                jedis.close();
        }
        return -1L;
    }

}
